package io.renren.modules.sys.controller;

import com.github.pagehelper.PageInfo;
import io.renren.common.annotation.SysLog;
import io.renren.common.pojo.R;
import io.renren.common.validator.ValidatorUtils;
import io.renren.modules.sys.entity.SysConfigEntity;
import io.renren.modules.sys.pojo.SysConfigQuery;
import io.renren.modules.sys.service.SysConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

/**
 * 系统参数信息
 * 
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2016年12月4日 下午6:55:53
 */
@RestController
@RequestMapping("/sys/config")
@Api(description = "参数管理接口")
public class SysConfigController extends BaseSysController {
	@Autowired
	private SysConfigService sysConfigService;
	
	/**
	 * 所有配置列表
	 */
	@GetMapping("/list")
	@PreAuthorize("hasAuthority('sys:config:list')")
	@ApiOperation("获取参数列表")
	public R<PageInfo<SysConfigEntity>> list(SysConfigQuery query){
		PageInfo<SysConfigEntity> pageInfo = sysConfigService.queryPage(query);
		return R.ok(pageInfo);
	}
	
	
	/**
	 * 配置信息
	 */
	@GetMapping("/info/{id}")
	@PreAuthorize("hasAuthority('sys:config:info')")
	@ApiOperation("获取参数信息")
	public R<SysConfigEntity> info(@ApiParam("参数ID") @PathVariable("id") Long id){
		SysConfigEntity config = sysConfigService.queryObject(id);
		return R.ok(config);
	}
	
	/**
	 * 保存配置
	 */
	@SysLog("保存配置")
	@PostMapping("/")
	@PreAuthorize("hasAuthority('sys:config:save')")
	@ApiOperation("保存配置")
	public R save(@ApiParam("参数对象") @RequestBody SysConfigEntity config){
		ValidatorUtils.validateEntity(config);

		sysConfigService.save(config);
		
		return R.ok();
	}
	
	/**
	 * 修改配置
	 */
	@SysLog("修改配置")
	@PutMapping("/")
	@PreAuthorize("hasAuthority('sys:config:update')")
	@ApiOperation("修改配置")
	public R update(@ApiParam("参数对象") @RequestBody SysConfigEntity config){
		ValidatorUtils.validateEntity(config);
		
		sysConfigService.update(config);
		
		return R.ok();
	}
	
	/**
	 * 删除配置
	 */
	@SysLog("删除配置")
	@DeleteMapping("/")
	@PreAuthorize("hasAuthority('sys:config:delete')")
	@ApiOperation("删除配置")
	public R delete(@ApiParam("参数ID列表") @RequestBody Long[] ids){
		sysConfigService.deleteBatch(ids);
		
		return R.ok();
	}

}
